(function ($) {
  $.fn.dragScroll = function () {
    var target = this;

    $(this).mousedown(function (event) {
      $(this)
        .data("down", true)
        .data("x", event.clientX)
        .data("y", event.clientY)
        .data("scrollLeft", this.scrollLeft)
        .data("scrollTop", this.scrollTop);
      return true;
    });

    // ウィンドウから外れてもイベント実行
    $(document)
      .mousemove(function (event) {
        if ($(target).data("down") == true) {
          // スクロール
          target.scrollLeft(
            $(target).data("scrollLeft") + $(target).data("x") - event.clientX
          );
          target.scrollTop(
            $(target).data("scrollTop") + $(target).data("y") - event.clientY
          );
          return true; // 文字列選択
        }
      })
      .mouseup(function (event) {
        $(target).data("down", false);
      });
    return this;
  };
})(jQuery);
